/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.colegiatura.bc;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.cip.esymons.colegiatura.be.Transferencia;
import org.cip.esymons.general.be.ColegiadoEspecialidad;
import org.cip.esymons.general.be.DireccionPersona;
import org.cip.esymons.general.be.TelefonoSolicitante;

/**
 *
 * @author ADMINISTRADOR
 */
@Stateless
public class TransferenciaFacade implements TransferenciaFacadeLocal {
    @PersistenceContext
    private EntityManager em;

    public void create(Transferencia transferencia) {
        em.persist(transferencia);
    }

    public void edit(Transferencia transferencia) {
        em.merge(transferencia);
    }

    public void remove(Transferencia transferencia) {
        Transferencia aux = em.merge(transferencia);
        em.remove(aux);
    }

    public Transferencia find(Object id) {
        return em.find(Transferencia.class, id);
    }

    public List<Transferencia> findAll() {

        List<Transferencia> lista = em.createQuery("select object(o) from Transferencia as o order by o.colCodigo.colnumeroCip").getResultList();
        
        return lista;
    }
    
    public List<Transferencia> buscaPorColegiado(Long codigo) {
        return em.createQuery("select object(o) from Transferencia as o where o.colCodigo.solCodigo=?1").setParameter(1, codigo).getResultList();
    }

    public List<Transferencia> listaPorFechasOrdenCip(Date fecha1, Date fecha2){

        return em.createQuery("select trans from Transferencia as trans where trans.trsfechaTransferencia between ?1 and ?2 order by trans.colCodigo.colnumeroCip").setParameter(1, fecha1).setParameter(2, fecha2).getResultList();

    }

    public List<Transferencia> listaPorFechasOrdenApellidos(Date fecha1, Date fecha2){

        return em.createQuery("select trans from Transferencia as trans where trans.trsfechaTransferencia between ?1 and ?2 order by trans.colCodigo.personaNatural.perapellidoPaterno").setParameter(1, fecha1).setParameter(2, fecha2).getResultList();

    }

    public List<Transferencia> listaPorFechasOrdenConsejos(Date fecha1, Date fecha2){

        return em.createQuery("select trans from Transferencia as trans where trans.trsfechaTransferencia between ?1 and ?2 order by trans.consejo.cdeDescripcion").setParameter(1, fecha1).setParameter(2, fecha2).getResultList();

    }

    public List<Transferencia> listaPorFechasOrdenFecha(Date fecha1, Date fecha2){

        return em.createQuery("select trans from Transferencia as trans where trans.trsfechaTransferencia between ?1 and ?2 order by trans.trsfechaTransferencia").setParameter(1, fecha1).setParameter(2, fecha2).getResultList();

    }

    public List<Transferencia> listaPorFechasTipoOrdenCip(Date fecha1, Date fecha2, Boolean tipo){

        return em.createQuery("select trans from Transferencia as trans where trans.trstipoTransferencia = ?3  and trans.trsfechaTransferencia between ?1 and ?2 order by trans.colCodigo.colnumeroCip")
                .setParameter(1, fecha1).setParameter(2, fecha2).setParameter(3, tipo).getResultList();

    }

    public List<Transferencia> listaPorFechasTipoOrdenApellidos(Date fecha1, Date fecha2, Boolean tipo){

        return em.createQuery("select trans from Transferencia as trans where trans.trstipoTransferencia = ?3 and trans.trsfechaTransferencia between ?1 and ?2  order by trans.colCodigo.personaNatural.perapellidoPaterno")
                .setParameter(1, fecha1).setParameter(2, fecha2).setParameter(3, tipo).getResultList();

    }

    public List<Transferencia> listaPorFechasTipoOrdenConsejos(Date fecha1, Date fecha2, Boolean tipo){

        return em.createQuery("select trans from Transferencia as trans where trans.trstipoTransferencia = ?3 and trans.trsfechaTransferencia between ?1 and ?2  order by trans.consejo.cdeDescripcion")
                .setParameter(1, fecha1).setParameter(2, fecha2).setParameter(3, tipo).getResultList();

    }

    public List<Transferencia> listaPorFechasTipoOrdenFecha(Date fecha1, Date fecha2, Boolean tipo){

        return em.createQuery("select trans from Transferencia as trans where trans.trstipoTransferencia = ?3 and trans.trsfechaTransferencia between ?1 and ?2  order by trans.trsfechaTransferencia")
                .setParameter(1, fecha1).setParameter(2, fecha2).setParameter(3, tipo).getResultList();

    }

    public List<Transferencia> listaTransferenciasExcelOrdenApellidos(Date fecha1, Date fecha2, Boolean tipo){

        List<Transferencia> listaTransferencias;
        List<DireccionPersona> listaDireccion;
        List<ColegiadoEspecialidad> listaColegiadoEsp;
        List<TelefonoSolicitante> listaTelefonos;
        List<TelefonoSolicitante> listaCelular;
        DireccionPersona direccion;
        TelefonoSolicitante telefono;
        TelefonoSolicitante celular;
        ColegiadoEspecialidad colEsp;

        listaTransferencias = new ArrayList<Transferencia>();

        listaTransferencias = em.createQuery("select trans from Transferencia as trans where trans.trstipoTransferencia = ?3 and trans.trsfechaTransferencia between ?1 and ?2  order by trans.colCodigo.personaNatural.perapellidoPaterno")
                .setParameter(1, fecha1).setParameter(2, fecha2).setParameter(3, tipo).getResultList();

        for(Transferencia trans : listaTransferencias){

            Long codigoCol = null;
            codigoCol = trans.getColCodigo().getSolCodigo();

            listaColegiadoEsp = new ArrayList<ColegiadoEspecialidad>();
            listaDireccion = new ArrayList<DireccionPersona>();
            listaTelefonos = new ArrayList<TelefonoSolicitante>();
            listaCelular = new ArrayList<TelefonoSolicitante>();
            
            listaTelefonos = em.createQuery("select t from TelefonoSolicitante as t where t.tsotipoTelefono = 'fijo' and t.solCodigo.solCodigo=?1").setParameter(1, codigoCol).getResultList();
            listaCelular = em.createQuery("select t from TelefonoSolicitante as t where t.tsotipoTelefono = 'celular' and t.solCodigo.solCodigo=?1").setParameter(1, codigoCol).getResultList();
            listaColegiadoEsp = em.createQuery("select o from ColegiadoEspecialidad as o where o.colCodigo.solCodigo = ?1 and o.cesPrioridad = true").setParameter(1, codigoCol).getResultList();
            listaDireccion = em.createQuery("select dir from DireccionPersona as dir where dir.solCodigo.solCodigo=?1").setParameter(1, codigoCol).getResultList();

            direccion = new DireccionPersona();
            telefono = new TelefonoSolicitante();
            celular = new TelefonoSolicitante();
            colEsp = new ColegiadoEspecialidad();

            if (listaDireccion.size() > 0) {
                direccion = listaDireccion.get(0);
                if (direccion != null) {
                  trans.getColCodigo().setDireccion(direccion);
                }
            }
            if (listaTelefonos.size() > 0) {
                telefono = listaTelefonos.get(0);
                if (telefono != null) {
                  trans.getColCodigo().setTelefono(telefono);
                 }
            }
            if (listaCelular.size() > 0) {
                celular = listaCelular.get(0);
                if (celular != null) {
                   trans.getColCodigo().setCelular(celular);
                }
            }
            if(listaColegiadoEsp.size()>0){
                colEsp = listaColegiadoEsp.get(0);
                if(colEsp != null){
                   trans.getColCodigo().setColegiadoEspecialidad(colEsp);
                }
            }
        }

        return listaTransferencias;

    }

    public List<Transferencia> listaTransferenciasExcelOrdenApellidos2(Date fecha1, Date fecha2){

        List<Transferencia> listaTransferencias;
        List<DireccionPersona> listaDireccion;
        List<ColegiadoEspecialidad> listaColegiadoEsp;
        List<TelefonoSolicitante> listaTelefonos;
        List<TelefonoSolicitante> listaCelular;
        DireccionPersona direccion;
        TelefonoSolicitante telefono;
        TelefonoSolicitante celular;
        ColegiadoEspecialidad colEsp;

        listaTransferencias = new ArrayList<Transferencia>();

        listaTransferencias = em.createQuery("select trans from Transferencia as trans where trans.trsfechaTransferencia between ?1 and ?2  order by trans.colCodigo.personaNatural.perapellidoPaterno")
                .setParameter(1, fecha1).setParameter(2, fecha2).getResultList();

        for(Transferencia trans : listaTransferencias){

            Long codigoCol = null;
            codigoCol = trans.getColCodigo().getSolCodigo();

            listaColegiadoEsp = new ArrayList<ColegiadoEspecialidad>();
            listaDireccion = new ArrayList<DireccionPersona>();
            listaTelefonos = new ArrayList<TelefonoSolicitante>();
            listaCelular = new ArrayList<TelefonoSolicitante>();
            
            listaTelefonos = em.createQuery("select t from TelefonoSolicitante as t where t.tsotipoTelefono = 'fijo' and t.solCodigo.solCodigo=?1").setParameter(1, codigoCol).getResultList();
            listaCelular = em.createQuery("select t from TelefonoSolicitante as t where t.tsotipoTelefono = 'celular' and t.solCodigo.solCodigo=?1").setParameter(1, codigoCol).getResultList();
            listaColegiadoEsp = em.createQuery("select o from ColegiadoEspecialidad as o where o.colCodigo.solCodigo = ?1 and o.cesPrioridad = true").setParameter(1, codigoCol).getResultList();
            listaDireccion = em.createQuery("select dir from DireccionPersona as dir where dir.solCodigo.solCodigo=?1").setParameter(1, codigoCol).getResultList();

            direccion = new DireccionPersona();
            telefono = new TelefonoSolicitante();
            celular = new TelefonoSolicitante();
            colEsp = new ColegiadoEspecialidad();

            if (listaDireccion.size() > 0) {
                direccion = listaDireccion.get(0);
                if (direccion != null) {
                  trans.getColCodigo().setDireccion(direccion);
                }
            }
            if (listaTelefonos.size() > 0) {
                telefono = listaTelefonos.get(0);
                if (telefono != null) {
                  trans.getColCodigo().setTelefono(telefono);
                 }
            }
            if (listaCelular.size() > 0) {
                celular = listaCelular.get(0);
                if (celular != null) {
                   trans.getColCodigo().setCelular(celular);
                }
            }
            if(listaColegiadoEsp.size()>0){
                colEsp = listaColegiadoEsp.get(0);
                if(colEsp != null){
                   trans.getColCodigo().setColegiadoEspecialidad(colEsp);
                }
            }
        }

        return listaTransferencias;

    }


}
